package com.cskaoyan.javase.oop1._7game._1pvz;

/**
 * 植物类
 * 植物类当中存在很多行为(成员方法)是需要和僵尸对象产生交互的
 * 这时,给方法传入僵尸对象是可行的
 * 但是太麻烦了,每一个方法都传入一个对象
 * 这时,推荐把僵尸对象作为植物类自身的成员变量
 * 也就是说植物类的成员变量中,要持有僵尸类对象的引用
 * 要能够直接和僵尸对象交互
 * 这在开发中,两个对象之间需要交互时,很常见.
 *
 *
 * @since 11:03
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Plant {
    // 属性
    String name;
    int hp;
    int damage;
    int price;

    // 持有僵尸对象的引用作为成员变量,方便交互
    Zombie plantZ;

    public Plant(String name, int hp, int damage, int price) {
        this.name = name;
        this.hp = hp;
        this.damage = damage;
        this.price = price;
    }

    // 行为
    /*
        植物的攻击,需要一个攻击的对象
        需要明确正在攻击的目标,正在攻击的僵尸的名字
        这里怎么实现呢?
        持有僵尸对象的引用作为成员变量,方便交互
     */
    public void attack() {
        System.out.println(name + "正在攻击" + plantZ.name);
    }

    public void beAttacked() {
        System.out.println(name + "正在被" + plantZ.name + "攻击,还剩下" + (hp - plantZ.damage) + "血量");
    }
}
